//var idTmr = ""; 

//function toExcel1(tableid) //读取表格中每个单元到EXCEL中 
//{ 
//    var curTbl = document.getElementById(tableid); 
//     var oXL = new ActiveXObject("Excel.Application"); 
//     //创建AX对象excel 
//     var oWB = oXL.Workbooks.Add(); 
//     //获取workbook对象 
//    var oSheet = oWB.ActiveSheet; 
//    //激活当前sheet 
//     var Lenr = curTbl.rows.length; 
//     //取得表格行数 
//     for (i = 0; i < Lenr; i++) 
//     { 
//         var Lenc = curTbl.rows(i).cells.length; 
//         //取得每行的列数 
//         for (j = 0; j < Lenc; j++) 
//         { 
//             oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText; 
//             //赋值 
//         } 
//     } 
//     oXL.Visible = true; 
//     //设置excel可见属性 
//}


//function copy(tabid) 
//{ 
//var oControlRange = document.body.createControlRange(); 
//oControlRange.add(tabid,0); 
//oControlRange.select(); 
//document.execCommand("Copy"); 
//} 
//function toExcel(tabid){ 
//copy(tabid); 
//try 
//{ 
//var xls = new ActiveXObject( "Excel.Application" ); 
//} 
//catch(e) 
//{ 
//alert( "Excel没有安装或浏览器设置不正确.请启用所有Active控件和插件"); 
//return false; 
//} 
//xls.visible = true; 
//var xlBook = xls.Workbooks.Add; 
//var xlsheet = xlBook.Worksheets(1); 
//xlBook.Worksheets(1).Activate; 
//for(var i=0;i<tabid.rows(0).cells.length;i++){ 
//xlsheet.Columns(i+1).ColumnWidth=15; 
//} 
//xlsheet.Paste; 
//xls=null; 
//idTmr = window.setInterval("Cleanup();",1); 
//} 
//function Cleanup() { 
//window.clearInterval(idTmr); 
//CollectGarbage(); 
//} 

// // Javascrīpt Document  
//// 杀Excel进程使用此变量  
//var idTmr = "";  
//// 函数功能：复制表格到Excel中  
//// 参    数：tableID 表的id  
//function toExcel(tableID)  
//{  
//        try  
//        {  
//                  // 加载ActiveX控件，获取Excel句柄  
//                  var exApp = new ActiveXObject("Excel.Application");  
//                // 创建一个Excel文件  
//                var ōWB = exApp.WorkBooks.add();  
//                // 获取sheet1句柄CA  
//                var exSheet = exApp.ActiveWorkBook.WorkSheets(1);  
//              // 设置sheet1的名称  
//               exSheet.name="演示复制表格到Excel中";  
//                // copy指定的表格  
//                var sel=document.body.createTextRange();  
//            sel.moveToElementText(tableID);  
//            sel.select();  
//            sel.execCommand("Copy");  
//                // 粘贴到sheet中  
//                exSheet.Paste();  
//                // 弹出保存对话框，保存Excel文件   
//                exApp.Save();  
//                // 退出Excel实例  
//                exApp.Quit();  
//                exApp = null;  
//                // 调用Cleanup（）进行垃圾回收  
//                idTmr = window.setInterval("Cleanup();",10);  
//        }catch(Exception)  
//        {  
//                //用户点击保存对话框中的取消按钮时会发生异常  
//        }  
//}  
//// 函数功能：杀掉Excel进程  
//function Cleanup() {  
//          window.clearInterval(idTmr);  
//          CollectGarbage();  
//}  
//function toExcel()
//{
//    var ex = new ActiveXObject("Excel.Application");
//    var ns = [];
//    var wb = ex.Workbooks.Add();
//    var sh = wb.Worksheets(1);
//        sh.Name="通讯录";
//    var tab = document.getElementById("tab");
//    var    ra = ex.Range(sh.Cells(1,1),sh.Cells(1,tab.rows[0].cells.length));
//        ra.HorizontalAlignment = -4108;
//        ra.Merge();
//        ra.Formula = "个人通讯录";
//        ra.Font.Size = 20;
//    for(var i =0;i<tab.rows.length;i++)
//    {
//        for(var j=0;j<tab.rows[i].cells.length;j++)
//        {
//            var rc = sh.Cells(2+i,j+1);
//                rc.NumberFormatLocal = "@";
//                rc.Formula = tab.rows[i].cells[j].innerHTML;
//        }
//    }
//    ex.Save();
//}

/**
* Utilities for exporting a table as an excel file
* @author Daniel.Sun
* @version 0.6
*/
var idTmr = "";
function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
} 
function toExcel(table) {
    function ImpactedCell(row, col, offset) {
        this.row = row;
        this.col = col;
        this.offset = offset;
    }
    function CurrentCell(row, col, text, colspan, rowspan) {
        this.row = row;
        this.col = col;
        this.text = text;
        this.colspan = colspan;
        this.rowspan = rowspan;
        this.getRow = function getRow() {
            return this.row;
        }
        this.setRow = function setRow(row) {
            this.row = row;
        }
        this.getCol = function getCol() {
            return this.col;
        }
        this.setCol = function setCol(col) {
            this.col = col;
        }
        this.setColspan = function setColspan(colspan) {
            this.colspan = colspan;
        }
        this.getColspan = function getColspan() {
            return this.colspan;
        }
        this.setRowspan = function setRowspan(rowspan) {
            this.rowspan = rowspan;
        }
        this.getRowspan = function getRowspan() {
            return this.rowspan;
        }
    }
    function CellManager(originalRow, colOffset, impactedCells, currentCell) {
        this.originalRow = originalRow;
        this.colOffset = colOffset;
        this.impactedCells = impactedCells;
        this.currentCell = currentCell;
        this.setCurrentCell = function setCurrentCell(currentCell) {
            this.currentCell = currentCell;
        }
        this.setOriginalRow = function setOriginalRow(originalRow) {
            this.originalRow = originalRow;
        }
        this.getCorrectedCol = function getCorrectedCol() {
            return this.currentCell.getCol() + this.colOffset;
        }
        this.setColOffset = function setColOffset(colOffset) {
            this.colOffset = colOffset;
        }
        this.getColOffset = function getColOffset() {
            return this.colOffset;
        }
        this.initColOffset = function initColOffset() {
            if (this.currentCell.getRow() != this.originalRow) {
                this.colOffset = 0;
            }
        }
        this.getImpactedCells = function getImpactedCells() {
            return this.impactedCells;
        }
        this.addImpactedCell = function addImpactedCell(impactedCell) {
            this.impactedCells.push(impactedCell);
        }
        this.addImpactedCells = function addImpactedCells() {
            var currentCell = this.currentCell;
            for (var i = 1; i < currentCell.getRowspan(); i++) {
                var impactedRow = currentCell.getRow() + i;
                
                this.calcOffset(impactedRow);
                var impactedCol = this.getCorrectedCol();
                var offset = 0;
                if (currentCell.getColspan()) {
                    offset = currentCell.getColspan();
                } else {
                    offset = 1;
                }
                this.addImpactedCell(new ImpactedCell(impactedRow, impactedCol, offset))
            }
        }
        this.calcOffset = function calcOffset(row) {
            var colOffset = this.colOffset;
            var result = colOffset;
            
            for (var i = 0; i < this.impactedCells.length; i++) {
                var impactedCell = this.impactedCells[i];
                if (row == impactedCell.row && this.getCorrectedCol() == impactedCell.col) {
                    colOffset += impactedCell.offset;
                    
                    result = colOffset;
                    break;
                }
            }
            this.colOffset = result;
            return result;
        }
        this.correctColOffset = function correctColOffset() {
            var currentCell = this.currentCell;
            var tmpColOffset;
            while (true) {
                this.calcOffset(currentCell.getRow());
                tmpColOffset = this.getColOffset();
                this.calcOffset(currentCell.getRow());
                if (this.getColOffset() == tmpColOffset) {
                     break;
                }
            } 
        }
        this.mergeCells = function mergeCells(oSheet, row1, col1, row2, col2) {
            oSheet.Range(oSheet.Cells(row1, col1), oSheet.Cells(row2, col2)).MergeCells = true;
        }
        this.mergeCellsConditionally = function mergeCellsConditionally(oSheet) {
            var currentCell = this.currentCell;
            var colsShouldMerge = currentCell.getColspan() > 1;
            var rowsShouldMerge = currentCell.getRowspan() > 1;
            if (colsShouldMerge && !rowsShouldMerge) {
                this.mergeCells(
                    oSheet,
                    currentCell.getRow(), this.getCorrectedCol(),
                    currentCell.getRow(), this.getCorrectedCol() 
                     + currentCell.getColspan() - 1
                );
            } else if (!colsShouldMerge && rowsShouldMerge) {
                this.mergeCells(
                    oSheet,
                    currentCell.getRow(), this.getCorrectedCol(),
                    currentCell.getRow() + currentCell.getRowspan() - 1, this.getCorrectedCol()
                );
            } else if (colsShouldMerge && rowsShouldMerge) {
                this.mergeCells(
                    oSheet,
                    currentCell.getRow(), this.getCorrectedCol(),
                    currentCell.getRow() + currentCell.getRowspan() - 1, 
                        this.getCorrectedCol() + currentCell.getColspan() - 1
                );
            }
        }
    }
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var cellManager = new CellManager(0, 0, new Array());
    traverseTable(
        table, 
        function(i, j, cell) {
            var text = cell.innerText;
            if (null != text) {
                var row = i + 1;
                var col = j + 1;
                var currentCell = new CurrentCell(row, col, text);
                cellManager.setCurrentCell(currentCell);
                cellManager.initColOffset();
                cellManager.setOriginalRow(row);
                var colspan = cell.getAttribute("colspan");
                var rowspan = cell.getAttribute("rowspan");
                
                currentCell.setColspan(colspan);
                currentCell.setRowspan(rowspan);
                var colsShouldMerge = currentCell.getColspan() > 1;
                var rowsShouldMerge = currentCell.getRowspan() > 1;
                cellManager.correctColOffset();
                if (rowsShouldMerge) {
                    cellManager.addImpactedCells();
                }
                
                cellManager.mergeCellsConditionally(oSheet);
                
                var cellInSheet = oSheet.Cells(currentCell.getRow(), cellManager.getCorrectedCol());
                if (colsShouldMerge) {
                    var align = cell.getAttribute("align");
                    if ("center" == align) {
                        cellInSheet.HorizontalAlignment = 3;
                    }
                     
                    cellManager.setColOffset(cellManager.getColOffset() + (colspan - 1));
                }
                cellInSheet.NumberFormatLocal = "@";
                cellInSheet.value = text;
            }
        }
    )
    oXL.Visible = true;
    oXL.UserControl = true; 
    oXL = null;
    idTmr = window.setInterval("Cleanup();",1); 
}
function traverseTable(table, action) {
    for (var i = 0; i < table.rows.length; i++) {
        var row = table.rows(i);
        for (var j = 0; j < row.cells.length; j++) {
            var cell = row.cells(j);
            action(i, j, cell);
        }
    }
}// JavaScript Document